<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
/**
 * 判断一个年份是不是闰年
 * @param year  要判断年份
 * @return 返回 true 或者 false. true表示是闰年
 */
function isLeapYear(year){
    return year % 4 == 0 && year % 100 != 0 || year % 400 == 0
}

/**
 * 打印区间[fromYear, toYear]内的所有的闰年
 * @param fromYear
 * @param toYear
 */
function printAllLearYears(fromYear, toYear){
    for (var i = fromYear; i <= toYear; i++){
        if (isLeapYear(i)){
            console.log(i);
        }
    }
}

/**
 * 判断指定的日期是否合法
 * @param year
 * @param month
 * @param day
 * @return 合法返回 true, 不合法返回 false
 */
function isLegal(year, month, day){
    if (year < 0) return false;
    if (month > 12 || month < 1) return false;
    if (day < 1 || day > 31) return false;

    if (month == 4 || month == 6 || month == 9 || month == 11){
        if (day > 30) return false;
    }else if (month == 2){
        if (isLeapYear(year)){
            if (day > 29) return false;
        }else{
            if (day > 28) return false
        }
    }

    return true;
}

/**
 * 判断指定的日期是当年的第几天
 * @param year
 * @param month
 * @param day
 * @param 如果给的日期不合法 返回-1, 否则返回具体的整数天数
 */
function currentDays(year, month, day){
    if (!isLegal(year, month, day))  return -1; // 如果日期不合法, 则返回 -1
    var sum = day;
    for (var i = 1; i < month; i++){
        sum += caculateDaysPerMonth(year, i);
    }
    return sum;
}

/**
 * 计算指定的月份有多少天
 * @param year
 * @param month
 * @return 如果给定的年和月不合法,则返回 -1 , 合法就返回这个月有多少天
 */
function caculateDaysPerMonth(year, month){
    if (!isLegal(year, month, 1)) return -1;
    if (month == 4 || month == 6 || month == 9 || month == 11){
        return 30;
    }else if (month == 2){
        if (isLeapYear(year)){
            return 29;
        }else{
            return 28;
        }
    }
    return 31;

}

console.log(currentDays(2017, 7, 24));
</script>
</body>
</html>